<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <script>
      //可以重复声明
      //var a = 100
      //var a = 'abc'
      //下面的可以覆盖掉上面的代码，因为有重名
      //window.a

      //依据声明的情况会成为全局对象的成员
      //下列代码在执行中，有哪几个是全局的
      // function f() {
      //   var b = 200
      //   c = 300
      // }
      //结果是：a、f、c都会成为window的成员，b不会成为，因为js中有函数作用域，b是在函数中声明的，所有外面不会访问到
      //c声明的时候没有指定var，所以在js中就会把其变为一个全局变量
      //f()

      //变量提升
      //console.log(a)
      //var a
      //所谓变量提升，可以这样理解，在整个js文件运行前，会执行全局扫描，然后会把所有用var声明的东西，提升到顶部
      // console.log(a) //输出undefined
      // var a = 200

      //下列代码输出结果都是200，早期js作用域只有全局作用域和函数作用域，没有块级作用域的概念，所谓的块指的是一段大括号括起来的代码段
      // var a = 100
      // var flag = true
      // if (flag) {
      //   var a = 200
      //   console.log(a)
      // }
      // console.log(a)

      //如果上列代码修改成下列,结果输出200,100
      var a = 100
      var flag = true
      function f() {
        var a = 200
        console.log(a)
      }
      console.log(a)
    </script>
  </body>
</html>
